home *** CD-ROM | disk | FTP | other *** search
- ; TRANFL.LSP [Article Figure 1] (c)1990, Gary Lewis
-
- ; ********************** TRANFL.LSP ***************************
- ; Copyright (c) Gary Lewis 1990
- ;______________________________________________________________
- (defun TRAN_INPUT ()
- (setq
- C (getpoint "\nEnter center point of circle X,Y,Z: ")
- R (getreal "\nEnter radius of circle: "))
- (command "CIRCLE" C R )
- (prompt "\nEnter 4 counterclockwise points... ")
- (setq
- P1 (getpoint "\nEnter 1st point X,Y,Z: ")
- P2 (getpoint "\nEnter 2nd point X,Y,Z: ")
- P3 (getpoint "\nEnter 3rd point X,Y,Z: ")
- P4 (getpoint "\nEnter 4th point X,Y,Z: "))
- )
- ;______________________________________________________________
- (defun TRAN_DRAW () ;draw transition
- (setq PCX (car C) PCY (cadr C) PCZ (caddr C)
- V1 (- (angle P1 P2) (/ PI 2))
- V2 (- (angle P2 P3) (/ PI 2))
- V3 (- (angle P3 P4) (/ PI 2))
- V4 (- (angle P4 P1) (/ PI 2))
- C1 (polar C V1 R) C2 (polar C V2 R)
- C3 (polar C V3 R) C4 (polar C V4 R)
- A1 (- PI (- (angle P1 P4) (angle P1 P2)))
- A2 (- PI (- (angle P2 P1) (angle P2 P3)))
- A3 (- PI (- (angle P2 P3) (angle P4 P3)))
- A4 (- PI (- (angle P3 P4) (angle P1 P4))))
- (command "LINE" P1 P2 P3 P4 P1 C1 P2 C2 P3 C3 P4 C4 P1 ^C)
- )
- ;______________________________________________________________
- (defun FLAT () ;true length
- (setq L12 (distance P1 P2) L23 (distance P2 P3)
- L34 (distance P3 P4) L41 (distance P4 P1)
- LC11 (distance C1 P1) LC12 (distance C1 P2)
- LC22 (distance C2 P2) LC23 (distance C2 P3)
- LC33 (distance C3 P3) LC34 (distance C3 P4)
- LC44 (distance C4 P4) LC41 (distance C4 P1))
- )
- ;______________________________________________________________
- (defun QXRAD () ;find swept rad for 4 points
- (setq PQZ (caddr P1) PG P1 S A1)
- (Q_RAD)
- (setq Q1 QG CON1 CONG E1 EG PQZ (caddr P2) PG P2 S A2)
- (Q_RAD)
- (setq Q2 QG CON2 CONG E2 EG PQZ (caddr P3) PG P3 S A3)
- (Q_RAD)
- (setq Q3 QG CON3 CONG E3 EG PQZ (caddr P4) PG P4 S A4)
- (Q_RAD)
- (setq Q4 QG CON4 CONG E4 EG)
- )
- ;______________________________________________________________
- (defun Q_RAD () ;swept rad
- (setq Z (abs(- PCZ PQZ)) K (list PCX PCY PQZ)
- A (distance PG K ) B (- A R)
- X (abs B) Y 0.0000001
- )
- (if (< X Y) ;to prevent division by zero
- (progn
- (setq QG 1E+10) ;QG would approach infinity
- (setq EG (* S R)) ;arc would become straight line
- (setq CONG -1)
- )
- (progn
- (if (> B 0)
- (progn
- (setq D1 (* (/ A (abs B)) Z))
- (setq QG (sqrt (+(expt R 2) (expt (- D1 Z) 2))))
- (setq CONG 1)
- )
- (progn
- (setq D2(/ (* (+ A (abs B)) Z) B))
- (setq QG (sqrt (+ (expt R 2) (expt D2 2))))
- (setq CONG -1)
- )
- )
- (setq EG (* (sin (/ (* S R) 2. QG)) 2. QG)) ;chord length
- )
- )
- )
- ;______________________________________________________________
- (defun TRI_CAL () ;cosine law
- (setq ANG-1 (angle G2 G1)
- COSA (/ (- (+ (expt BG 2)(expt CG 2))(expt AG 2)) 2. BG CG)
- ANG (+ (abs(atan(/(sqrt (- 1. (expt COSA 2)))COSA))) ANG-1)
- G3 (polar G2 ANG CG))
- )
- ;______________________________________________________________
- (defun DFLAT ()
- (setq G1 (getpoint "\nPick start point for flat layout ")
- G2 (list (+ (car G1) L12) (cadr G1))
- F1 G1 F2 G2 BG L12 CG LC12 AG LC11)
- (TRI_CAL)
- (setq FC1 G3 G1 FC1 AG E2 CG LC22 BG LC12)
- (TRI_CAL)
- (setq FC2 G3 G1 G3 BG LC22 AG LC23 CG L23)
- (TRI_CAL)
- (setq F3 G3 G2 G3 CG LC33 AG E3 BG LC23)
- (TRI_CAL)
- (setq FC3 G3 AG LC34 CG L34 G1 G3 BG LC33)
- (TRI_CAL)
- (setq F4 G3 G2 G3 AG E4 BG LC34 CG LC44)
- (TRI_CAL)
- (setq FC4 G3 G1 G3 AG LC41 BG LC44 CG L41)
- (TRI_CAL)
- (setq F5 G3 G2 G3 AG E1 BG LC41 CG LC11)
- (TRI_CAL)
- (setq FC5 G3)
- (command "LINE" F5 F4 F3 F2 F1 FC1 F2 FC2 F3 FC3 F4 FC4
- F5 FC5 ^C)
- (setq AP1 FC2 AP2 FC1 AR Q2 CON CON2)
- (ARCG)
- (setq AP1 FC3 AP2 FC2 AR Q3 CON CON3)
- (ARCG)
- (setq AP1 FC4 AP2 FC3 AR Q4 CON CON4)
- (ARCG)
- (setq AP1 FC5 AP2 FC4 AR Q1 CON CON1)
- (ARCG)
- )
- ;______________________________________________________________
- (defun ARCG () ;draw arcs concave or convex
- (if (> CON 0)
- (command "ARC" AP1 "E" AP2 "R" AR )
- (command "ARC" AP2 "E" AP1 "R" AR )
- )
- )
- ;______________________________________________________________
- (defun C:TRAN () ;main program
- (TRAN_INPUT)
- (setq SBLIP (getvar "BLIPMODE") SCMDE (getvar "CMDECHO"))
- (setvar "BLIPMODE" 0) (setvar "CMDECHO" 1)
- (TRAN_DRAW)
- (setvar "BLIPMODE" SBLIP) (setvar "CMDECHO" SCMDE)
- (FLAT) (QXRAD)
- (prompt "Find a clear space on drawing then type (dflat): ")
- )
-